{% if is_async %}
    {% if is_finite %}
/**
* @brief Callback type for {{ name.lower_snake_case }}_async.
*/
    {% else %}
/**
* @brief Callback type for subscribe_{{ name.lower_snake_case }}.
*/
    {% endif %}
using {{ name.upper_camel_case }}Callback = std::function<void({% if has_result %}{{ plugin_name.upper_camel_case }}::Result, {% endif %}{{ return_type.name }})>;

/**
 * @brief {{ method_description | replace('\n', '\n *')}}
 */
void {% if not is_finite %}subscribe_{% endif %}{{ name.lower_snake_case }}{% if is_finite %}_async{% endif %}({% for param in params %}{{ param.type_info.name }} {{ param.name.lower_snake_case }}, {% endfor %}{{ name.upper_camel_case }}Callback callback);
{% endif %}

{% if is_sync %}
/**
 * @brief Poll for '{{ return_type.name }}' (blocking).
 *
 * @return One {{ return_type.name }} update.
 */
{{ return_type.name }} {{ name.lower_snake_case }}({% for param in params %}{{ param.type_info.name }} {{ param.name.lower_snake_case }}{% if not loop.last %}, {% endif %}{% endfor %}) const;
{% endif %}
